Manon.icu

I'm here to make you a better developer by teaching you everything I know about building for the web.

Published 2022-06-11

Postgresql - INNER JOIN

在关系数据库中,数据通常分布在多个表中,要选择完整的数据,通常需要从多个表中选择数据。

使用INNER JOIN组合来自多个表的数据。

语法

SELECT
	pka,
	c1,
	pkb,
	c2
FROM
	A
INNER JOIN B ON pka = fka;
  • 首先指定要选择的列
  • 指定要选择的表为主表
  • 指定要选择的表为从表,然后使用INNER JOIN连接主表和从表

对于表中的每一行AINNER JOINpka列中的值与表中每一行的fka列中的值进行比较B

  • 如果想到,则将两个表中的相同的值连接起来添加到结果集中
  • 如果没有相同的值,则忽略

MbNv8O

示例

示例数据库 mC6IHk

使用INNER JOIN连接两个表

在这些表中,每当客户付款时,都会在表中插入一个新的payment,而客户可能有零次或多次付款。通过customer_id建立两个表关系。

SELECT
	customer.customer_id,
	first_name,
	last_name,
	amount,
	payment_date
FROM
	customer
INNER JOIN payment
    ON payment.customer_id = customer.customer_id
ORDER BY payment_date;

bVc7JZ

SELECT
	customer_id,
	first_name,
	last_name,
	amount,
	payment_date
FROM
	customer
INNER JOIN payment USING(customer_id)
ORDER BY payment_date;

使用INNER JOIN连接多个表

下图说明了三个表之间的关系:staffpaymentcustomer

  • 每个员工处理 0 或多个付款,每个付款只能被一个员工处理
  • 每个客户进行 0 或多次付款,每次付款只能被一个客户支付

NqdK05

SELECT
	c.customer_id,
	c.first_name customer_first_name,
	c.last_name customer_last_name,
	s.first_name staff_first_name,
	s.last_name staff_last_name,
	amount,
	payment_date
FROM
	customer c
INNER JOIN payment p
    ON p.customer_id = c.customer_id
INNER JOIN staff s
    ON p.staff_id = s.staff_id
ORDER BY payment_date;

mxHQfg

Comments

No Comments!